////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2017-2018 Qualcomm Technologies, Inc.
// All Rights Reserved.
// Confidential and Proprietary - Qualcomm Technologies, Inc.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// THIS IS AUTO-GENERATED CODE.  PLEASE DO NOT EDIT (File bug reports against tools).
///
/// Auto-generated by: ParameterParser V1.1.4
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @file  aecsnapshotctrl.h
/// @brief Auto-generated Chromatix parameter file
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#ifndef AECSNAPSHOTCTRL_H
#define AECSNAPSHOTCTRL_H

#include "parametermodule.h"
#include "parameterfilesymboltable.h"
#include "parametertypes.h"
#include "globalelements.h"
#include "aecglobalelements.h"

#define AECSNAPSHOTCTRL_NAMESPACE_BEGIN namespace aecSnapshotCtrl {
#define AECSNAPSHOTCTRL_NAMESPACE_END }

AECSNAPSHOTCTRL_NAMESPACE_BEGIN

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// LLSLuxExpTimeLUTType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct LLSLuxExpTimeLUTType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// thresLuxIndex
    ///
    /// Tuning Level:  often_tune
    /// Description:   Specify the lux threshold for mapping the exposure time needed when LLS is triggered.
    /// Range:         [0,1000]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT  thresLuxIndex;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// requiredExpTime
    ///
    /// Tuning Level:  often_tune
    /// Description:   Required Exposure time wrt thresLuxIndex.
    /// Range:         [1,60000000000]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT64 requiredExpTime;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// SnapshotCtrlExtensionType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct SnapshotCtrlExtensionType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// enableLLS
    ///
    /// Tuning Level:  often_tune
    /// Description:   Enable Flag for Low Light Shot Feature, which extends Exposure time to delay flash trigger lux level
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    BOOL                  enableLLS;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// LLSLuxHysteresis
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   Threshold pair of Lux for entering and exiting LLS use case
    /// Comments:       Base Type Tuning Definition
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    aecglobalelements::StartEndType          LLSLuxHysteresis;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// LLSExpTimeLUT - Array
    /// Min Length:    1
    /// Max Length:    Unbounded
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32                LLSExpTimeLUTCount;
    UINT32                LLSExpTimeLUTID;
    LLSLuxExpTimeLUTType* LLSExpTimeLUT;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// SnapshotCtrlArbitrationType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct SnapshotCtrlArbitrationType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// expTableIDSnapshot
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   Exposure table Selection for Snapshot.
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    aecglobalelements::ExposureTableIDType expTableIDSnapshot;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// bracketingAdjForEVPos2
    ///
    /// Tuning Level:  never_tune
    /// Description:   Specify the EV bracketing adjustment for + 2 EV
    /// Range:         [0,2]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT               bracketingAdjForEVPos2;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// bracketingAdjForEVNeg2
    ///
    /// Tuning Level:  never_tune
    /// Description:   Specify the EV bracketing adjustment for - 2 EV
    /// Range:         [0,2]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT               bracketingAdjForEVNeg2;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// maxLLSExtendedGain
    ///
    /// Tuning Level:  often_tune
    /// Description:   Specify the max gain LLS can tradeoff for
    /// Range:         [1,512]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT               maxLLSExtendedGain;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// AECSnapshotCtrlType
/// Comments:       Snapshot Tuning Definition
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct AECSnapshotCtrlType
{
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Binary file symbol table entry ID
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32 SymbolTableID;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// module_version
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct module_versionStruct
    {
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// Binary file symbol table entry ID
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 SymbolTableID;
        INT32 major_revision;
        INT32 minor_revision;
        INT32 incr_revision;
    } module_version;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// snapCtrlArb
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    SnapshotCtrlArbitrationType snapCtrlArb;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// snapCtrlExt
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    SnapshotCtrlExtensionType   snapCtrlExt;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// AECSnapshotCtrlTypeClass
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class AECSnapshotCtrlTypeClass : public ParameterModule, public AECSnapshotCtrlType
{
public:
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Version
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static const UINT16 MAJOR = 1;
    static const UINT16 MINOR = 0;
    static const UINT32 PATCH = 0;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Default Constructor
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    AECSnapshotCtrlTypeClass(
        const CHAR* name);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Constructor
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    AECSnapshotCtrlTypeClass(
        const CHAR* name,
        UINT32 modeId,
        UINT16 mode,
        UINT16 subMode,
        UINT32 group);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Destructor
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    virtual ~AECSnapshotCtrlTypeClass();

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// GetName
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static const CHAR* GetName(
        const CHAR* type);


    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load LLSLuxExpTimeLUTType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadLLSLuxExpTimeLUTType(
        ParameterFileSymbolTableEntry* entry,
        LLSLuxExpTimeLUTType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load SnapshotCtrlExtensionType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadSnapshotCtrlExtensionType(
        ParameterFileSymbolTableEntry* entry,
        SnapshotCtrlExtensionType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load SnapshotCtrlArbitrationType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadSnapshotCtrlArbitrationType(
        ParameterFileSymbolTableEntry* entry,
        SnapshotCtrlArbitrationType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load AECSnapshotCtrlType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadAECSnapshotCtrlType(
        ParameterFileSymbolTableEntry* entry,
        AECSnapshotCtrlType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load module_versionStruct
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadmodule_versionStruct(
        ParameterFileSymbolTableEntry* entry,
        AECSnapshotCtrlType::module_versionStruct* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Unload SnapshotCtrlExtensionType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static void UnloadSnapshotCtrlExtensionType(
        SnapshotCtrlExtensionType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Unload AECSnapshotCtrlType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static void UnloadAECSnapshotCtrlType(
        AECSnapshotCtrlType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Parse symbol table entry, and return a new object
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    virtual ParameterModule* Parse(
        ParameterSetManager* manager,
        ParameterFileSymbolTableEntry* entry) const;

}; // End class AECSnapshotCtrlTypeClass

AECSNAPSHOTCTRL_NAMESPACE_END
#endif // AECSNAPSHOTCTRL_H

